home *** CD-ROM | disk | FTP | other *** search
- // ==================================================
- // LPrefsFile.cp
- // Copyright (C) 1996 Mizutori Tetsuya, July 4 1996.
- // ==================================================
- // All documents are pretty-printed in Geneva 10-point font.
-
- #pragma once
-
- #include "LPrefsFile.h"
-
-
- const OSType kPrefType = 'pref';
- const OSType kPrefCreator = 'MzTm';
- const ResType PREF_ResType = 'PREF';
- const ResIDT PREF_ResID = 1000;
-
-
- // --------------------------------------------------
- // ・ LPrefsFile()
- // --------------------------------------------------
-
- LPrefsFile::LPrefsFile()
- {
- mPrefFileType = kPrefType;
- mPrefFileCreator = kPrefCreator;
- mPrefResType = PREF_ResType;
- mPrefResID = PREF_ResID;
- }
-
-
- // --------------------------------------------------
- // ・ LPrefsFile()
- // --------------------------------------------------
-
- LPrefsFile::LPrefsFile(
- ConstStr255Param inFileName )
- : LPreferencesFile( inFileName, false )
- {
- mPrefFileType = kPrefType;
- mPrefFileCreator = kPrefCreator;
- mPrefResType = PREF_ResType;
- mPrefResID = PREF_ResID;
- }
-
-
- // --------------------------------------------------
- // ・ ~LPrefsFile
- // --------------------------------------------------
-
- LPrefsFile::~LPrefsFile()
- {
- }
-
-
- // --------------------------------------------------
- // ・ SetupFileInfo
- // --------------------------------------------------
-
- void
- LPrefsFile::SetupFileInfo(
- OSType inPrefFileType,
- OSType inPrefFileCreator )
- {
- mPrefFileType = inPrefFileType;
- mPrefFileCreator = inPrefFileCreator;
- }
-
-
- // --------------------------------------------------
- // ・ SetupResType
- // --------------------------------------------------
-
- void
- LPrefsFile::SetupResType(
- ResType inPrefResType,
- ResIDT inPrefResID )
- {
- mPrefResType = inPrefResType;
- mPrefResID = inPrefResID;
- }
-
-
- // --------------------------------------------------
- // ・ LoadPref
- // --------------------------------------------------
-
- OSErr
- LPrefsFile::LoadPref(
- void* outBlockDataPtr,
- const Size inByteSize )
- {
- Handle resH;
- short curResFile = ::CurResFile();
- OSErr err = noErr;
-
- short vRefNum;
- vRefNum = OpenOrCreateResourceFork( fsRdWrPerm,
- mPrefFileCreator, mPrefFileType, smSystemScript );
-
- ::UseResFile( vRefNum );
- resH = ::Get1Resource( mPrefResType, mPrefResID );
-
- if ( resH != nil ) {
- // read preferences data from the Prefs file
- ::BlockMoveData( (Ptr) *resH, (Ptr) outBlockDataPtr, inByteSize );
- ::ReleaseResource( resH );
- } else {
- // read default preferences from this application file, if Prefs file is empty
- ::UseResFile( curResFile );
- Handle theH;
- theH = ::GetResource( mPrefResType, mPrefResID );
- if ( theH != nil ) {
- ::BlockMoveData( (Ptr) *theH, (Ptr) outBlockDataPtr, inByteSize );
- ::ReleaseResource( theH );
- } else {
- err = resNotFound;
- }
- }
-
- ::UseResFile( curResFile );
- CloseResourceFork();
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ SavePref
- // --------------------------------------------------
-
- OSErr
- LPrefsFile::SavePref(
- const void* inBlockDataPtr,
- const Size inByteSize )
- {
- Handle resH;
- short curResFile = ::CurResFile();
- OSErr err = noErr;
-
- short vRefNum;
- vRefNum = OpenOrCreateResourceFork( fsRdWrPerm,
- mPrefFileCreator, mPrefFileType, smSystemScript );
-
- ::UseResFile( vRefNum );
- resH = ::Get1Resource( mPrefResType, mPrefResID );
-
- // remove the existing PREF resource
- if ( resH != nil ) {
- // if no changes, then do not touch the resource
- Boolean theSame = true;
- for ( long i=0; i<inByteSize; i++ ) {
- if ( ((unsigned char *) inBlockDataPtr)[i] != ((unsigned char *) *resH)[i] )
- theSame = false;
- }
- if ( theSame ) goto out;
- ::RemoveResource( resH );
- ::DisposeHandle ( resH );
- }
-
- // create new PREF resource by the preferences PrefRec data
- resH = NewHandleClear( inByteSize );
- if ( resH != nil ) {
- ::BlockMoveData( (Ptr) inBlockDataPtr, (Ptr) *resH, inByteSize );
- ::AddResource( resH, mPrefResType, mPrefResID, "¥p" );
- ::WriteResource( resH );
- ::ReleaseResource( resH );
- } else {
- err = resNotFound;
- }
-
- out:
- ::UseResFile( curResFile );
- CloseResourceFork();
-
- return err;
- }
-
-
-
- // end of program
-